#!/bin/bash

# 配置变量
TO="hanqingwu@126.com" # 收件人邮箱
FROM="hanqingwu@126.com" # 发件人邮箱
CC="hanqingwu@126.com,1263633@qq.com" # 发件人邮箱
SUBJECT_DISK="磁盘告警"
SMTP_SERVER="smtp.126.com" # SMTP服务器地址
DISK_SPACE_WARN_LIMIT=60 # 磁盘空间限制百分比（例如，90表示磁盘空间使用超过90%时发送警告）
DISK_SPACE_DANGE_LIMIT=75 # 磁盘空间限制百分比（例如，90表示磁盘空间使用超过90%时发送警告）
DISKS="" #="/dev/sdb5 /dev/sdb7" # 需要监控的磁盘分区，根据实际情况修改

# 检查磁盘空间并发送邮件的函数
check_disk_space_and_send_mail() {
    mail=""
    content=""

    if [  -z "$DISKS" ]; then
        for disk in `df | grep /dev |awk '{print $1}' `
        do
            if [[ $disk == "/dev"* ]]; then
                DISKS="$DISKS $disk"
            fi
        done
    fi

    for disk in $DISKS
    do
        echo "检查 $disk"

        usedMB=$(df -h | grep "$disk" | awk '{print $3}' | cut -d'%' -f1)
        availMB=$(df -h | grep "$disk" | awk '{print $4}' | cut -d'%' -f1)
        used=$(df -h | grep "$disk" | awk '{print $5}' | cut -d'%' -f1)

        if [ ! -z "$used" ] && [ $used -gt $DISK_SPACE_DANGE_LIMIT ]; then
            echo "磁盘空间已使用${used}%，超过危险限制${DISK_SPACE_DANGE_LIMIT}%, 发送邮件警告..."
            mail="tue"
            content="$content\n 磁盘容量危险 ${disk} 空间使用率 ${used}% 超过危险限制 ${DISK_SPACE_DANGE_LIMIT}%，当前使用 ${usedMB} 剩余可用 ${availMB}, 请注意"
        elif [ ! -z "$used" ] && [ $used -gt $DISK_SPACE_WARN_LIMIT ]; then
            mail="tue"
            echo "磁盘空间已使用${used}%，超过警告限制${DISK_SPACE_WARN_LIMIT}%, 发送邮件警告..."
            content="$content\n 磁盘容量警告 ${disk} 空间使用率 ${used}% 超过警告限制 ${DISK_SPACE_WARN_LIMIT}%，当前使用 ${usedMB} 剩余可用 ${availMB}, 请注意"
        fi
    done

    if [ ! -z "$mail" ]; then
        echo "正在发送邮件"

        addr="From:${FROM}\nTo:${TO}\nCc:${CC}\nSubject:${SUBJECT_DISK}\n\n"
        cc=""
        for c in $CC
        do
            cc="$cc $c"
        done
        echo -e "$addr$content" |  sendmail "$TO" "$cc" -s ${SMTP_SERVER}
        echo "发送邮件完成"
    fi
}

# 监控函数
monitor() {
    while true; do
        check_disk_space_and_send_mail
        sleep 3600 # 每小时检查一次
    done
}

# 执行监控
monitor
